//
//  tick_timer.c
//  emc_smc
//
//  Created by fukai on 2018/10.
//  Copyright © 2018年 赛博智能车实验室. All rights reserved.
//

#include "stm32f10x.h"
#include "tick_timer.h"


//
//变量定义
static int fac_us=0;	//us延时数
static int fac_ms=0;	//ms延时数




//滴答定时器的延时函数初始化
void DelayInit()
{
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	//选择外部时钟  HCLK/8
	fac_us=SystemCoreClock/8000000;	//为系统时钟的1/8  
	fac_ms=fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数
}

//微秒延时
void DelayUs(unsigned int nus)
{
	int temp;	    	 
	SysTick->LOAD=nus*fac_us; //时间加载	  		 
	SysTick->VAL=0x00;        //清空计数器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数	 
	do
	{
		temp=SysTick->CTRL;
	}
	while(temp&0x01&&!(temp&(1<<16)));		//等待时间到达   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//关闭计数器
	SysTick->VAL =0X00;       				//清空计数器	
}

//毫秒延时
void DelayMs(unsigned int nms)
{
	int temp;		   
	SysTick->LOAD=nms*fac_ms;				//时间加载
	SysTick->VAL =0x00;          	 		//清空计数器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;//开始倒数  
	do
	{
		temp=SysTick->CTRL;
	}
	while(temp&0x01&&!(temp&(1<<16)));		//等待时间到达   
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//关闭计数器
	SysTick->VAL =0X00;       				//清空计数器	  	
}


